#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
jlpay日志配置示例
"""

import os
import sys
import logging

# 添加项目根目录到Python路径，确保能够导入jlpay包
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from jlpay.utils.log_config import configure_jlpay_logging, configure_jlpay_logging_from_env
from jlpay.core.http import DefaultHttpClientBuilder, HttpRequest


def demo_basic_log_config():
    """演示基本日志配置"""
    print("\n=== 演示基本日志配置 (INFO级别) ===")
    # 配置为INFO级别（只显示INFO及以上级别）
    logger = configure_jlpay_logging(level=logging.INFO)
    
    # 获取各模块的日志记录器
    http_logger = logging.getLogger("jlpay.http")
    service_logger = logging.getLogger("jlpay.service")
    
    # 输出不同级别的日志
    logger.debug("这是DEBUG级别日志，不会显示")
    logger.info("这是INFO级别日志，会显示")
    logger.warning("这是WARNING级别日志，会显示")
    
    http_logger.debug("HTTP模块DEBUG级别日志，不会显示")
    http_logger.info("HTTP模块INFO级别日志，会显示")
    
    service_logger.debug("服务模块DEBUG级别日志，不会显示")
    service_logger.warning("服务模块WARNING级别日志，会显示")


def demo_debug_log_config():
    """演示DEBUG级别日志配置"""
    print("\n=== 演示DEBUG级别日志配置 ===")
    # 配置为DEBUG级别（显示所有级别）
    logger = configure_jlpay_logging(level=logging.DEBUG)
    
    # 获取各模块的日志记录器
    http_logger = logging.getLogger("jlpay.http")
    service_logger = logging.getLogger("jlpay.service")
    
    # 输出不同级别的日志
    logger.debug("这是DEBUG级别日志，现在会显示")
    logger.info("这是INFO级别日志，会显示")
    
    http_logger.debug("HTTP模块DEBUG级别日志，现在会显示")
    http_logger.info("HTTP模块INFO级别日志，会显示")
    
    service_logger.debug("服务模块DEBUG级别日志，现在会显示")
    service_logger.warning("服务模块WARNING级别日志，会显示")


def demo_mixed_log_levels():
    """演示混合日志级别配置"""
    print("\n=== 演示混合日志级别配置 ===")
    # 全局配置为INFO，但HTTP模块为DEBUG级别
    logger = configure_jlpay_logging(
        level=logging.INFO,
        module_levels={
            'jlpay.http': logging.DEBUG,
            'jlpay.service': logging.WARNING  # 服务模块设置为WARNING级别
        }
    )
    
    # 获取各模块的日志记录器
    http_logger = logging.getLogger("jlpay.http")
    service_logger = logging.getLogger("jlpay.service")
    
    # 输出不同级别的日志
    logger.debug("根日志DEBUG级别，不会显示")
    logger.info("根日志INFO级别，会显示")
    
    http_logger.debug("HTTP模块DEBUG级别日志，会显示")
    http_logger.info("HTTP模块INFO级别日志，会显示")
    
    service_logger.debug("服务模块DEBUG级别日志，不会显示")
    service_logger.info("服务模块INFO级别日志，不会显示")
    service_logger.warning("服务模块WARNING级别日志，会显示")


def demo_file_output():
    """演示同时输出到文件"""
    print("\n=== 演示同时输出到文件 ===")
    log_file = "jlpay_demo.log"
    
    # 配置为INFO级别，同时输出到文件
    logger = configure_jlpay_logging(
        level=logging.INFO,
        log_file=log_file
    )
    
    logger.info(f"日志同时写入到文件 {log_file}")
    logger.warning("这是一条警告日志，会同时显示在控制台和文件中")
    
    print(f"请查看 {os.path.abspath(log_file)} 文件以确认日志输出")


def demo_env_config():
    """演示通过环境变量配置日志"""
    print("\n=== 演示通过环境变量配置日志 ===")
    print("设置环境变量 JLPAY_LOG_LEVEL=DEBUG")
    
    # 保存原始环境变量
    old_level = os.environ.get("JLPAY_LOG_LEVEL")
    
    try:
        # 设置环境变量
        os.environ["JLPAY_LOG_LEVEL"] = "DEBUG"
        os.environ["JLPAY_LOG_HTTP"] = "DEBUG"
        os.environ["JLPAY_LOG_SERVICE"] = "WARNING"
        
        # 通过环境变量配置
        logger = configure_jlpay_logging_from_env()
        
        # 获取各模块的日志记录器
        http_logger = logging.getLogger("jlpay.http")
        service_logger = logging.getLogger("jlpay.service")
        
        # 输出不同级别的日志
        logger.debug("根日志DEBUG级别，通过环境变量配置，会显示")
        http_logger.debug("HTTP模块DEBUG级别日志，会显示")
        service_logger.info("服务模块INFO级别日志，不会显示")
        service_logger.warning("服务模块WARNING级别日志，会显示")
        
    finally:
        # 恢复原始环境变量
        if old_level:
            os.environ["JLPAY_LOG_LEVEL"] = old_level
        else:
            os.environ.pop("JLPAY_LOG_LEVEL", None)
        
        os.environ.pop("JLPAY_LOG_HTTP", None)
        os.environ.pop("JLPAY_LOG_SERVICE", None)


def demo_http_request():
    """演示实际HTTP请求的日志输出"""
    print("\n=== 演示实际HTTP请求的日志输出 ===")
    
    # 配置为INFO级别（只显示INFO及以上级别）
    configure_jlpay_logging(level=logging.INFO)
    print("1. 当前日志级别为INFO，只会显示INFO及以上级别的日志")
    
    # 创建HTTP客户端
    http_client = DefaultHttpClientBuilder.build()
    
    # 构建一个简单的HTTP请求
    request = HttpRequest.builder() \
        .url("https://httpbin.org/get") \
        .method("GET") \
        .build()
    
    # 执行请求
    print("\n执行HTTP请求...")
    response = http_client.execute(request)
    print(f"请求完成，状态码：{response.status}")
    
    # 修改日志级别为DEBUG
    print("\n2. 现在切换日志级别为DEBUG，将显示所有日志")
    configure_jlpay_logging(level=logging.DEBUG)
    
    # 再次执行请求
    print("\n再次执行HTTP请求...")
    response = http_client.execute(request)
    print(f"请求完成，状态码：{response.status}")


if __name__ == "__main__":
    print("===== jlpay日志配置示例 =====")
    
    # 运行各个示例
    demo_basic_log_config()
    demo_debug_log_config()
    demo_mixed_log_levels()
    demo_file_output()
    demo_env_config()
    demo_http_request()
    
    print("\n示例运行完毕！") 